/**
 * 
 */
package ec.edu.uce.tour.web.utilitarios;

import java.io.IOException;

import javax.faces.application.FacesMessage;
import javax.faces.application.ProjectStage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

/**
 * @author XPS15Z
 *
 */
public class Utilitario {

	/**
	 * Muestra un mensaje de informacion en la pantalla
	 * @param mensaje
	 * @param severidad
	 */
	public static void mensajeInformativo(String mensaje) {
		FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje,"");
		FacesContext facesContext = FacesContext.getCurrentInstance();
		facesContext.addMessage(null, facesMessage);
	}
	
	/**
	 * Muestra un mensaje de error en la pantalla
	 * @param mensaje
	 * @param severidad
	 */
	public static void mensajeError(String mensaje, Throwable e) {
		FacesMessage facesMessage;
		FacesContext facesContext = FacesContext.getCurrentInstance();
		if(facesContext.isProjectStage(ProjectStage.Development))
		{
		facesMessage= new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getCause()==null? "null" : e.getCause().toString(),e.getLocalizedMessage());
		e.printStackTrace();
		}else
			facesMessage= new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje, "");
		facesContext.addMessage(null, facesMessage);	
	}
	
	/**
	 * Muestra un mensaje de advertencia en la pantalla
	 * @param mensaje
	 * @param severidad
	 */
	public static void mensajeAdvertencia(String mensaje) {
		FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_WARN, mensaje, "");
		FacesContext facesContext = FacesContext.getCurrentInstance();
		facesContext.addMessage(null, facesMessage);
	}
	
	/**
	 * M�todo que crear� variables de petici�n para que sean manejadas en el contexto
	 * JSF
	 * @param clave
	 * @param valor
	 */
	public static void crearVariablePeticion(String clave, Object valor) {
		FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put(clave, valor);
	}
	
	/**
	 * Devuelve una variable de petici�n que este almacena en la petici�n 
	 * JSF
	 * @param clave
	 * @return
	 */
	
	public static Object obtenerVariablePeticion(String clave) {
		return ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getParameter(clave);
	}
	
	/**
	 * M�todo que crear� variables de sesi�n para que sean manejadas en el contexto
	 * JSF
	 * @param clave
	 * @param valor
	 */
	public static void crearVariableSesion(String clave, Object valor){
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(clave, valor);
	}
	
	/**
	 * Obtiene una variable de sesi�n del contexto JSF
	 * @param clave
	 * @return
	 */
	public static Object obtenerVariableSesion(String clave) {
		return FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(clave);
	}
	
	/**
	 * Remueve la variable del contexto de sesi�n JSF
	 * @param nombre
	 */
	public static void removerVariable(String nombre) {
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(nombre);
	}
	
	/**
	 * Invalida la sesi�n y todos los objetos en ella
	 */
	public static void cerrarSesion() {
		FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
	}
	
	/**
	 * Redirige a otra p�gina se lo utiliza en caso excepcionales
	 * @param url
	 */
	public static void redirigirPagina(String url) {
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect(url);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
